Memory tests are generally carried out to ensure that memory modules used in a system are functioning correctly. In safety critical applications, for instance, it is necessary to ensure that memory structures in the application do not suffer from faults. Industrial designs and safety systems usually require continuous non-destructive testing of memory used by the application to ensure that the systems function as expected.
Testing in software applications typically requires careful scheduling as memory contents could be changed by the application or the application could read test pattern data instead of required data. In other words, memory testing may be destructive and application data must be saved before the test is performed. However, because the application data is saved, the application cannot access required data and is stalled for the duration of the memory test.
Generally speaking, in a software system, software interrupts have to be disabled when memory modules in the system are being tested. For example, in a typical software memory test, contents of the memory region to be tested need to be copied and saved before the memory region is tested. Generally, software interrupts are disabled for the whole duration of the test which includes, making a copy of the memory region to be tested, testing the memory region, and restoring the contents of the memory from the safe copy. Interrupts are only re-enabled after the test is completed and the contents of the memory are restored. Consequently, the application is stalled for the whole duration of the memory test as the processor is tied up running the test.
Therefore, it is desirable to be able to perform memory tests without having to stall the application for the whole duration of the test. It is also desirable to be able to accelerate the process and free up the processor from exhaustive memory tests.
It is within this context that the invention arises.